using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Attributes;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Attributes.DomainAttributes;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Enums;
using System.Collections.Generic;
using System.ComponentModel;

namespace Baci.ArcGIS._DataManagementTools._Raster._MosaicDataset
{
    /// <summary>
    /// <para>Build Overviews</para>
    /// <para>Defines and generates overviews on a mosaic dataset.</para>
    /// <para>定义镶嵌数据集并生成概视图。</para>
    /// </summary>    
    [DisplayName("Build Overviews")]
    public class BuildOverviews : AbstractGPProcess
    {
        /// <summary>
        /// 无参构造
        /// </summary>
        public BuildOverviews()
        {

        }

        /// <summary>
        /// 有参构造
        /// </summary>
        /// <param name="_in_mosaic_dataset">
        /// <para>Mosaic Dataset</para>
        /// <para>The mosaic dataset where you want to build overviews.</para>
        /// <para>要在其中构建概视图的镶嵌数据集。</para>
        /// </param>
        public BuildOverviews(object _in_mosaic_dataset)
        {
            this._in_mosaic_dataset = _in_mosaic_dataset;
        }
        public override string ToolboxName => "Data Management Tools";

        public override string ToolName => "Build Overviews";

        public override string CallName => "management.BuildOverviews";

        public override List<string> AcceptEnvironments => ["parallelProcessingFactor"];

        public override object[] ParameterInfo => [_in_mosaic_dataset, _where_clause, _define_missing_tiles.GetGPValue(), _generate_overviews.GetGPValue(), _generate_missing_images.GetGPValue(), _regenerate_stale_images.GetGPValue(), _out_mosaic_dataset];

        /// <summary>
        /// <para>Mosaic Dataset</para>
        /// <para>The mosaic dataset where you want to build overviews.</para>
        /// <para>要在其中构建概视图的镶嵌数据集。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Mosaic Dataset")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _in_mosaic_dataset { get; set; }


        /// <summary>
        /// <para>Query Definition</para>
        /// <para>An SQL statement to select specific rasters within the mosaic dataset. The selected rasters will have their overview built.</para>
        /// <para>用于在镶嵌数据集中选择特定栅格的 SQL 语句。所选栅格将构建其概览。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Query Definition")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public object _where_clause { get; set; } = null;


        /// <summary>
        /// <para>Define Missing Overview Tiles</para>
        /// <para><xdoc>
        ///   <para>Identify where overviews are needed and define them.</para>
        ///   <bulletList>
        ///     <bullet_item>Checked—Automatically identify where overviews are needed and define them. This is the default.</bullet_item><para/>
        ///     <bullet_item>Unchecked—Do not define new overviews.</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>确定需要概述的位置并对其进行定义。</para>
        ///   <bulletList>
        ///     <bullet_item>选中 （Checked） - 自动识别需要概览的位置并对其进行定义。这是默认设置。</bullet_item><para/>
        ///     <bullet_item>未选中 （Unchecked） - 不定义新概视图。</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Define Missing Overview Tiles")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public _define_missing_tiles_value _define_missing_tiles { get; set; } = _define_missing_tiles_value._true;

        public enum _define_missing_tiles_value
        {
            /// <summary>
            /// <para>DEFINE_MISSING_TILES</para>
            /// <para></para>
            /// <para></para>
            /// </summary>
            [Description("DEFINE_MISSING_TILES")]
            [GPEnumValue("true")]
            _true,

            /// <summary>
            /// <para>NO_DEFINE_MISSING_TILES</para>
            /// <para></para>
            /// <para></para>
            /// </summary>
            [Description("NO_DEFINE_MISSING_TILES")]
            [GPEnumValue("false")]
            _false,

        }

        /// <summary>
        /// <para>Generate Overviews</para>
        /// <para><xdoc>
        ///   <para>Generate all overviews that need to be created or re-created. This includes missing overviews and stale overviews.</para>
        ///   <bulletList>
        ///     <bullet_item>Checked—Generate all overviews, including those that already exist. This is the default.</bullet_item><para/>
        ///     <bullet_item>Unchecked—Generate only the overviews that have been defined but not yet generated.</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>生成需要创建或重新创建的所有概视图。这包括缺少的概述和过时的概述。</para>
        ///   <bulletList>
        ///     <bullet_item>选中 （Checked） - 生成所有概览，包括已存在的概览。这是默认设置。</bullet_item><para/>
        ///     <bullet_item>未选中 （Unchecked） - 仅生成已定义但尚未生成的概视图。</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Generate Overviews")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public _generate_overviews_value _generate_overviews { get; set; } = _generate_overviews_value._true;

        public enum _generate_overviews_value
        {
            /// <summary>
            /// <para>GENERATE_OVERVIEWS</para>
            /// <para></para>
            /// <para></para>
            /// </summary>
            [Description("GENERATE_OVERVIEWS")]
            [GPEnumValue("true")]
            _true,

            /// <summary>
            /// <para>NO_GENERATE_OVERVIEWS</para>
            /// <para></para>
            /// <para></para>
            /// </summary>
            [Description("NO_GENERATE_OVERVIEWS")]
            [GPEnumValue("false")]
            _false,

        }

        /// <summary>
        /// <para>Generate Missing Overview Images Only</para>
        /// <para><xdoc>
        ///   <para>Use if overviews have been defined but not generated.</para>
        ///   <bulletList>
        ///     <bullet_item>Checked—Overviews that have been defined but not generated will be generated. This is the default.</bullet_item><para/>
        ///     <bullet_item>Unchecked—Overviews that have been defined but not generated will not be generated.</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>如果已定义概述但未生成，则使用。</para>
        ///   <bulletList>
        ///     <bullet_item>选中 - 将生成已定义但未生成的概视图。这是默认设置。</bullet_item><para/>
        ///     <bullet_item>未选中 - 将不会生成已定义但未生成的概视图。</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Generate Missing Overview Images Only")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public _generate_missing_images_value _generate_missing_images { get; set; } = _generate_missing_images_value._true;

        public enum _generate_missing_images_value
        {
            /// <summary>
            /// <para>GENERATE_MISSING_IMAGES</para>
            /// <para></para>
            /// <para></para>
            /// </summary>
            [Description("GENERATE_MISSING_IMAGES")]
            [GPEnumValue("true")]
            _true,

            /// <summary>
            /// <para>IGNORE_MISSING_IMAGES</para>
            /// <para></para>
            /// <para></para>
            /// </summary>
            [Description("IGNORE_MISSING_IMAGES")]
            [GPEnumValue("false")]
            _false,

        }

        /// <summary>
        /// <para>Regenerate Stale Overview Images Only</para>
        /// <para><xdoc>
        ///   <para>Overviews become stale when you change the underlying raster datasets or modify their properties.</para>
        ///   <bulletList>
        ///     <bullet_item>Checked—Identify and regenerate stale overviews. This is the default.</bullet_item><para/>
        ///     <bullet_item>Unchecked—Do not regenerate stale overviews.</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>当您更改基础栅格数据集或修改其属性时，概视图将变得过时。</para>
        ///   <bulletList>
        ///     <bullet_item>选中 - 识别并重新生成过时的概视图。这是默认设置。</bullet_item><para/>
        ///     <bullet_item>未选中 （Unchecked） - 不重新生成过时的概视图。</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Regenerate Stale Overview Images Only")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public _regenerate_stale_images_value _regenerate_stale_images { get; set; } = _regenerate_stale_images_value._true;

        public enum _regenerate_stale_images_value
        {
            /// <summary>
            /// <para>REGENERATE_STALE_IMAGES</para>
            /// <para></para>
            /// <para></para>
            /// </summary>
            [Description("REGENERATE_STALE_IMAGES")]
            [GPEnumValue("true")]
            _true,

            /// <summary>
            /// <para>IGNORE_STALE_IMAGES</para>
            /// <para></para>
            /// <para></para>
            /// </summary>
            [Description("IGNORE_STALE_IMAGES")]
            [GPEnumValue("false")]
            _false,

        }

        /// <summary>
        /// <para>Updated Mosaic Dataset</para>
        /// <para></para>
        /// <para></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Updated Mosaic Dataset")]
        [Description("")]
        [Option(OptionTypeEnum.derived)]
        public object _out_mosaic_dataset { get; set; }


        public BuildOverviews SetEnv(object parallelProcessingFactor = null)
        {
            base.SetEnv(parallelProcessingFactor: parallelProcessingFactor);
            return this;
        }

    }

}